<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include_once 'principal.php';

/**
 *
 * Controller para ações de Autor
 * @author Douglas Rafael
 * @package controllers     
 */
class Autor extends Principal {

    public function __construct() {
        parent::__construct();
        //Verifica se o usuário estar logado no sistema
        $this->_verificaLogado();
        
        $this->config->load('pagination');
        $this->title = 'Cadastro de Autor || ' . $this->title;
        $this->title_page = 'Cadastro de Autor';
        $this->message_geral = '<h2 class="title-alert">informações gerais</h2>
                        <p>Não é permitido cadastros duplicados de <b>AUTORES</b>, então verifique se o autor a ser inserido não possui cadastrado.</p>
                        <p><b>Só é possível apagar um AUTOR se ele não estiver relacionado com um livro.</b></p>
                        <p><b>ALT + N</b> Abre o formulário para cadastrar um novo Autor.</p>
                        <p><b>ESC</b> Fecha o formulário.</p>
                        <p>Duplo clique no <b>nome</b> do autor abre o formulário para edição do registro.</p>';
    }

    public function index() {
        $this->listar();
    }

    /**
     * Método para <b>Carregar</b> a view com a lista de autores
     */
    public function listar() {
        try {
            $this->_verificaPermissao( ControleAcesso::CONSULTAR_AUTOR );
            // Removendo a variavel 'searchterm' da sessão
            $this->session->unset_userdata('searchterm');
           
            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_pagina = $this->config->item('per_page');
            $autores = $this->facade->selectAutores($init, $total_pagina);
            $total_rows = $this->facade->quantAutor();
            
            // paginação
            $config['base_url'] = base_url() . "autor/listar";
            $config['total_rows'] = $total_rows;

            $this->pagination->initialize($config);

            $data['total_rows'] = $total_rows;
            $data['pagination'] = $this->pagination->create_links();
            $data['autores'] = $autores;

            $this->load->view('autor_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

    /**
     * Método para Cadastrar autor
     */
    public function cadastrar() {
        try {
            $this->_verificaPermissao( ControleAcesso::CADASTRAR_AUTOR );
            $this->load->library('form_validation');
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[5]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->insertAutor();

                Mensagem::setMensagemSucesso("Autor<b> " . $this->input->post('nome') . "</b> cadastrado com sucesso.");

                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    /**
     * Método para Atualizar autor
     */
    public function atualizar() {
        try {
            $this->_verificaPermissao( ControleAcesso::ATUALIZAR_AUTOR );
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigoUp", "Código", "trim|required|is_natural|exact_lenght[6]|xss_clean");
            $this->form_validation->set_rules("nomeUp", "Nome", "trim|required|min_length[5]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->updateAutor();
                Mensagem::setMensagemSucesso("Autor<b> " . $this->input->post('nomeUp') . "</b> atualizado com sucesso.");

                $this->session->userdata('searchterm') ?  $this->buscar() :  $this->listar();   
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    /**
     * Método para Excluir autor
     */
    public function excluir() {
        try {
            $this->_verificaPermissao( ControleAcesso::EXCLUIR_AUTOR );
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigo", "Código", "trim|required|xss_clean");
            $this->form_validation->set_rules("nome", "Nome", "trim|required|min_length[5]|xss_clean");
            
            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $this->facade->deleteAutor();

                Mensagem::setMensagemSucesso("Autor(es) excluído com sucesso.");

                $this->listar();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

    /**
     * Método para Buscar autor
     */
    public function buscar() {
        try {
            $searchterm = $this->facade->searchtermHandler($this->input->get_post('term', TRUE));
            $init = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
            $total_rows = $this->facade->quantSearchAutor($searchterm);
            $total_pagina = $this->config->item('per_page');
            $autores = $this->facade->searchAutor($init, $total_pagina, $searchterm);

            //paginação
            $config['base_url'] = base_url() . "autor/buscar";
            $config['total_rows'] = $total_rows;
            $this->pagination->initialize($config);

            $data['autores'] = $autores;
            $data['total_rows'] = $config['total_rows'];
            $data['pagination'] = $this->pagination->create_links();

            if ($total_rows == 0)
                Mensagem::setMensagem("Nenhum registro foi encontrado para essa pesquisa: <b> $searchterm </b>", "aviso");

            $this->load->view('autor_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }

}
